In this article, we introduce solutions for solving crossword puzzles by machine using Natural Language Processing techniques. This task is divided into two subtasks of finding possible answers for each table description and then selecting the target word and placing it in the table. The first subtask, which is dedicated to finding the word from its description, has many other uses as in text generation and paraphrasing. For this purpose, we used a combination of different methods, including searching and finding semantic similarities on the data of previously solved tables, searching in dictionary and Wikipedia articles, using a masked Language model, and finding related words in Farsnet and the Farsiyar tool. The results show that the combination of these methods has a better result (82% recall) compared to their individual implementation. In the next subtask, we give the list of possible answers to a constraint-satisfaction search algorithm to choose the correct answer that can be placed in the table, taking into account the constraints of the table, and fill the empty cells in the best way and solve the crossword. The overall evaluation shows 80. 22% precision and 68. 86% recall in solving the crossword puzzle.